#define N_DEBUG_DISPLAYS 4
DisplayDebugFlags debug_flags[N_DEBUG_DISPLAYS];
+/* This is a flag to speed up development builds. We set it to TRUE when
+ * any of the debug displays has debug flags >0, but we never set it back
+ * to FALSE. This way we don't need to call gtk_widget_get_display() in
+ * hot paths. */
+gboolean any_display_debug_flags_set = FALSE;
#ifdef G_ENABLE_DEBUG
static const GDebugKey gtk_debug_keys[] = {
debug_flags[0].flags = g_parse_debug_string (env_string,
gtk_debug_keys,
G_N_ELEMENTS (gtk_debug_keys));
+ any_display_debug_flags_set = debug_flags[0].flags > 0;
env_string = NULL;
}
#endif /* G_ENABLE_DEBUG */
return 0;
}
+gboolean
+gtk_get_any_display_debug_flag_set (void)
+{
+ return any_display_debug_flags_set;
+}
+
void
gtk_set_display_debug_flags (GdkDisplay *display,
guint flags)
if (debug_flags[i].display == display)
{
debug_flags[i].flags = flags;
+ if (flags > 0)
+ any_display_debug_flags_set = TRUE;
+
return;
}
}
void gtk_set_display_debug_flags (GdkDisplay *display,
guint flags);
guint gtk_get_display_debug_flags (GdkDisplay *display);
+gboolean gtk_get_any_display_debug_flag_set (void);
#ifdef G_ENABLE_DEBUG
-#define GTK_DISPLAY_DEBUG_CHECK(display,type) G_UNLIKELY (gtk_get_display_debug_flags (display) & GTK_DEBUG_##type)
+#define GTK_DISPLAY_DEBUG_CHECK(display,type) (gtk_get_any_display_debug_flag_set () && G_UNLIKELY (gtk_get_display_debug_flags (display) & GTK_DEBUG_##type))
#define GTK_DISPLAY_NOTE(display,type,action) \
G_STMT_START { \
if (GTK_DISPLAY_DEBUG_CHECK (display,type)) { action; }; \